package com.gitee.wsl.mathematics.vector.ext


import com.gitee.wsl.mathematics.vector.Vector
import kotlin.math.pow

/** [n]范数 */
fun<T:Number> Vector<T, *>.norm(n: Int = 2) =
    when (n) {
        -1, Int.MAX_VALUE -> proxy.toList().maxOfOrNull { abs(it).toDouble() }
        1                 -> proxy.toList().sumOf{abs(it).toDouble()}
        2                 -> length.toDouble()
        else              -> proxy.toList().sumOf { it.toDouble().pow(n) }.pow(1.0 / n)
    } ?: 0.0